home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-M68K / AMIGAINT.{_E < prev    next >
Text File  |  1999-09-17  |  4KB  |  136 lines

  1. /*
  2. ** amigaints.h -- Amiga Linux interrupt handling structs and prototypes
  3. **
  4. ** Copyright 1992 by Greg Harp
  5. **
  6. ** This file is subject to the terms and conditions of the GNU General Public
  7. ** License.  See the file COPYING in the main directory of this archive
  8. ** for more details.
  9. **
  10. ** Created 10/2/92 by Greg Harp
  11. */
  12.  
  13. #ifndef _ASMm68k_AMIGAINTS_H_
  14. #define _ASMm68k_AMIGAINTS_H_
  15.  
  16. /*
  17. ** Amiga Interrupt sources.
  18. **
  19. */
  20.  
  21. #define AUTO_IRQS           (8)
  22. #define AMI_STD_IRQS        (14)
  23. #define CIA_IRQS            (5)
  24. #define AMI_IRQS            (32) /* AUTO_IRQS+AMI_STD_IRQS+2*CIA_IRQS */
  25.  
  26. /* vertical blanking interrupt */
  27. #define IRQ_AMIGA_VERTB     0
  28.  
  29. /* copper interrupt */
  30. #define IRQ_AMIGA_COPPER    1
  31.  
  32. /* Audio interrupts */
  33. #define IRQ_AMIGA_AUD0        2
  34. #define IRQ_AMIGA_AUD1        3
  35. #define IRQ_AMIGA_AUD2        4
  36. #define IRQ_AMIGA_AUD3        5
  37.  
  38. /* Blitter done interrupt */
  39. #define IRQ_AMIGA_BLIT        6
  40.  
  41. /* floppy disk interrupts */
  42. #define IRQ_AMIGA_DSKSYN    7
  43. #define IRQ_AMIGA_DSKBLK    8
  44.  
  45. /* builtin serial port interrupts */
  46. #define IRQ_AMIGA_RBF        9
  47. #define IRQ_AMIGA_TBE        10
  48.  
  49. /* software interrupts */
  50. #define IRQ_AMIGA_SOFT      11
  51.  
  52. /* interrupts from external hardware */
  53. #define IRQ_AMIGA_PORTS        12
  54. #define IRQ_AMIGA_EXTER        13
  55.  
  56. /* CIA interrupt sources */
  57. #define IRQ_AMIGA_CIAA      14
  58. #define IRQ_AMIGA_CIAA_TA   14
  59. #define IRQ_AMIGA_CIAA_TB   15
  60. #define IRQ_AMIGA_CIAA_ALRM 16
  61. #define IRQ_AMIGA_CIAA_SP   17
  62. #define IRQ_AMIGA_CIAA_FLG  18
  63. #define IRQ_AMIGA_CIAB      19
  64. #define IRQ_AMIGA_CIAB_TA   19
  65. #define IRQ_AMIGA_CIAB_TB   20
  66. #define IRQ_AMIGA_CIAB_ALRM 21
  67. #define IRQ_AMIGA_CIAB_SP   22
  68. #define IRQ_AMIGA_CIAB_FLG  23
  69.  
  70. /* auto-vector interrupts */
  71. #define IRQ_AMIGA_AUTO      24
  72. #define IRQ_AMIGA_AUTO_0    24 /* This is just a dummy */
  73. #define IRQ_AMIGA_AUTO_1    25
  74. #define IRQ_AMIGA_AUTO_2    26
  75. #define IRQ_AMIGA_AUTO_3    27
  76. #define IRQ_AMIGA_AUTO_4    28
  77. #define IRQ_AMIGA_AUTO_5    29
  78. #define IRQ_AMIGA_AUTO_6    30
  79. #define IRQ_AMIGA_AUTO_7    31
  80.  
  81. #define IRQ_FLOPPY        IRQ_AMIGA_DSKBLK
  82.  
  83. /* INTREQR masks */
  84. #define IRQ1_MASK   0x0007    /* INTREQR mask for IRQ 1 */
  85. #define IRQ2_MASK   0x0008    /* INTREQR mask for IRQ 2 */
  86. #define IRQ3_MASK   0x0070    /* INTREQR mask for IRQ 3 */
  87. #define IRQ4_MASK   0x0780    /* INTREQR mask for IRQ 4 */
  88. #define IRQ5_MASK   0x1800    /* INTREQR mask for IRQ 5 */
  89. #define IRQ6_MASK   0x2000    /* INTREQR mask for IRQ 6 */
  90. #define IRQ7_MASK   0x4000    /* INTREQR mask for IRQ 7 */
  91.  
  92. #define IF_SETCLR   0x8000      /* set/clr bit */
  93. #define IF_INTEN    0x4000    /* master interrupt bit in INT* registers */
  94. #define IF_EXTER    0x2000    /* external level 6 and CIA B interrupt */
  95. #define IF_DSKSYN   0x1000    /* disk sync interrupt */
  96. #define IF_RBF        0x0800    /* serial receive buffer full interrupt */
  97. #define IF_AUD3     0x0400    /* audio channel 3 done interrupt */
  98. #define IF_AUD2     0x0200    /* audio channel 2 done interrupt */
  99. #define IF_AUD1     0x0100    /* audio channel 1 done interrupt */
  100. #define IF_AUD0     0x0080    /* audio channel 0 done interrupt */
  101. #define IF_BLIT     0x0040    /* blitter done interrupt */
  102. #define IF_VERTB    0x0020    /* vertical blanking interrupt */
  103. #define IF_COPER    0x0010    /* copper interrupt */
  104. #define IF_PORTS    0x0008    /* external level 2 and CIA A interrupt */
  105. #define IF_SOFT     0x0004    /* software initiated interrupt */
  106. #define IF_DSKBLK   0x0002    /* diskblock DMA finished */
  107. #define IF_TBE        0x0001    /* serial transmit buffer empty interrupt */
  108.  
  109. struct irq_server {
  110.     unsigned short count, reentrance;
  111. };
  112.  
  113. extern void amiga_do_irq(int irq, struct pt_regs *fp);
  114. extern void amiga_do_irq_list(int irq, struct pt_regs *fp, struct irq_server *server);
  115.  
  116. /* CIA interrupt control register bits */
  117.  
  118. #define CIA_ICR_TA    0x01
  119. #define CIA_ICR_TB    0x02
  120. #define CIA_ICR_ALRM    0x04
  121. #define CIA_ICR_SP    0x08
  122. #define CIA_ICR_FLG    0x10
  123. #define CIA_ICR_ALL    0x1f
  124. #define CIA_ICR_SETCLR    0x80
  125.  
  126. /* to access the interrupt control registers of CIA's use only
  127. ** these functions, they behave exactly like the amiga os routines
  128. */
  129.  
  130. extern struct ciabase ciaa_base, ciab_base;
  131.  
  132. extern unsigned char cia_set_irq(struct ciabase *base, unsigned char mask);
  133. extern unsigned char cia_able_irq(struct ciabase *base, unsigned char mask);
  134.  
  135. #endif /* asm-m68k/amigaints.h */
  136.